home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / INC / CRYSTAL.M2H < prev   
Encoding:
Text File  |  1994-01-15  |  7.6 KB  |  258 lines

  1. /***************************************************************************/
  2. /* preprocessor macros for crystal                                         */
  3. /***************************************************************************/
  4.  
  5. /* for better reading...                                                   */
  6.  
  7. #define not !
  8.  
  9. /* ST compilers                                                            */
  10.  
  11. #define ST (ANAM2 || LPRM2 || SPCM2 || HM2 || MM2   || TDIM2 || FTLM2 || \
  12.             MAMM2 || JM2   || MSM2  || RM2 || GNUM2)
  13.  
  14. /* memory models                                                           */
  15.  
  16. #define linear (ANAM2 || LPRM2 || SPCM2 || HM2  || MM2   || TDIM2 || \
  17.                 FTLM2 || MAMM2 || JM2   || MSM2 || RM2   || GNUM2 || \
  18.                 XAM2  || XGM2  || XHM2  || XRM2 || MCSM2 || XGPM2 || \
  19.                 CBM2  || MWM2  || XTM2  || MOCM2)
  20.  
  21. #define intel (FSTM2 || TSM2_1 || TSM2_2 || SDSM2 || LM2 || TM2 || HSM2 || \
  22.                SBM2  || GPM2)
  23.  
  24. /* operating Systems                                                       */
  25.  
  26. #define GEMDOS ST
  27. #define PCDOS intel
  28. #define UNIX (XAM2 || XGM2 || XHM2 || XRM2 || MCSM2 || XGPM2 || CBM2 || \
  29.               MWM2 || XTM2 || MOCM2)
  30. #define FLEXOS
  31.  
  32. #if not((GEMDOS) || (PCDOS) || (UNIX))
  33. #error compiler not supported
  34. #endif
  35.  
  36. /* define long if a compiler does not support 16 bit types                 */
  37.  
  38. #define long (ANAM2 || XAM2)
  39.  
  40. /* if you want to take care of ABC-GEM then set to 1 else 0                */
  41.  
  42. #define ABC 1
  43.  
  44. /*
  45. #if ABC
  46. #warning ...taking care of ABC-GEM
  47. #endif
  48. */
  49.  
  50. /* if you want to emulate scrap functions by means of POSIX calls          */
  51.  
  52. #define use_POSIX 1
  53.  
  54. /*
  55. #if use_POSIX
  56. #warning ...using POSIX calls
  57. #endif
  58. */
  59.  
  60. /* handle REF parameters (system-dependent)                                */
  61.  
  62. #ifndef MM2
  63. #define REF
  64. #endif
  65.  
  66. /* ISO SYSTEM.CAST()                                                       */
  67.  
  68. #if (defined ANAM2) || (defined XAM2)   || (defined TDIM2)  || \
  69.     (defined FSTM2) || (defined LM2)    || (defined SDSM2)  || \
  70.     (defined MSM2)  || (defined TSM2_1) || (defined TSM2_2) || \
  71.     (defined FTLM2)
  72. #define CAST(T,x) T(x)
  73. #elif (defined LPRM2) || (defined SPCM2)
  74. #define CAST(T,x) VAL(T,x)
  75. #endif
  76.  
  77. /* ISO constant constructors                                               */
  78.  
  79. #define constructor (HM2 || MM2 || ISOM2)
  80.  
  81. /* ISO procedure constants                                                 */
  82.  
  83. #define proc_const (TSM2_1 || TSM2_2 || FTLM2 || ISOM2)
  84.  
  85. /* ISO PACKEDSET                                                           */
  86.  
  87. #ifndef ISOM2
  88. #define PACKEDSET SET
  89. #endif
  90.  
  91. /* set a MC68K register like SPCM2, TDIM2, LPRM2, ANAM2 ...                */
  92.  
  93. #if (defined HM2) || (defined MM2)
  94. #define SETREG(Reg,F) LOAD(F,Reg)
  95. #elif (defined MSM2)
  96. #define SETREG(Reg,F) (*$A+*) MOVE.L \#F,Reg (*$A-*)
  97. #endif
  98.  
  99. /* ISO INT(), assuming VAL IMPORT                                          */
  100.  
  101. #if (defined FTLM2) || (defined TSM2_1)|| (defined ANAM2) || \
  102.     (defined FSTM2) || (defined LPRM2) || (defined SPCM2) || \
  103.     (defined TDIM2)
  104. #define INT(a) VAL(INTEGER,a)
  105. #endif
  106.  
  107. /* compiler directives                                                     */
  108.  
  109. #if (defined MM2)
  110. #define DEF_SWITCHES $C+,H+,I+,Z+
  111. #define IMP_SWITCHES $A+,B-,C+,D-,E-,H+,I+,J+,K+,L+,M+,R-,S-,T+,U+,Y+,Z+
  112. #define DRIVER $B+
  113.  
  114. #elif (defined HM2) || (defined XHM2)
  115. #define DEF_SWITCHES $i-,$w-,$E+,$F-,$K-
  116. #define IMP_SWITCHES $i-,$w-,$D-,$E+,$G+,$H-,$I-,$K-,$L-,$P-,$Q+,$S-,$T-,$V-,$W-,$X+,$Y-
  117. #define DRIVER $M+
  118.  
  119. #elif (defined TDIM2)
  120. #define DEF_SWITCHES
  121. #define IMP_SWITCHES $C-,$N-,$Q+,$R-,$S-,$T-,$V-
  122.  
  123. #elif (defined FSTM2)
  124. #define DEF_SWITCHES
  125. #define IMP_SWITCHES $A+,$L-,$R-,$S-,$T-
  126.  
  127. #elif (defined TSM2_1)
  128. #define DEF_SWITCHES
  129. #define IMP_SWITCHES
  130.  
  131. #elif (defined TSM2_2)
  132. #define DEF_SWITCHES
  133. #define IMP_SWITCHES \#check(nil_ptr=>off,index=>off,stack=>off,overflow=>off,range=>off)
  134.  
  135. #elif (defined LM2)
  136. #define DEF_SWITCHES
  137. #define IMP_SWITCHES $S-,R-,F-,T-
  138.  
  139. #elif (defined FTLM2)
  140. #define DEF_SWITCHES
  141. #define IMP_SWITCHES $L-*)(*$P-*)(*$R-*)(*$T-*)(*$U-
  142.  
  143. #else
  144. #define DEF_SWITCHES
  145. #define IMP_SWITCHES
  146. #endif
  147.  
  148. #if (defined HM2) || (defined XHM2)
  149. #define begin_word (*$W+*)
  150. #define end_word (*$W-*)
  151. #else
  152. #define begin_word
  153. #define end_word
  154. #endif
  155.  
  156. /* macros supporting Seimet's method                                       */
  157.  
  158. #if (defined LPRM2) || (defined SPCM2)
  159. #define AES_SYSTEM_IMPORT FROM SYSTEM IMPORT SETREG,VAL; \
  160.                           FROM Register IMPORT D1;
  161. #define CAST_IMPORT FROM SYSTEM IMPORT VAL;
  162. #elif (defined MM2) || (defined HM2)
  163. #define AES_SYSTEM_IMPORT FROM SYSTEM IMPORT LOAD,CAST; \
  164.                           FROM Register IMPORT D1;
  165. #define CAST_IMPORT FROM SYSTEM IMPORT CAST;
  166. #elif (defined ANAM2) || (defined TDIM2) || (defined FTLM2)
  167. #define AES_SYSTEM_IMPORT FROM SYSTEM IMPORT SETREG; \
  168.                           FROM Register IMPORT D1;
  169. #define CAST_IMPORT
  170. #elif (defined GPM2) || (defined XGPM2)
  171. #define AES_SYSTEM_IMPORT FROM SYSTEM IMPORT CAST;
  172. #define CAST_IMPORT FROM SYSTEM IMPORT CAST;
  173. #else
  174. #define AES_SYSTEM_IMPORT
  175. #define CAST_IMPORT
  176. #endif
  177.  
  178. /* use Seimet's method                                                     */
  179.  
  180. #define Seimet (LPRM2 || SPCM2 || HM2 || MM2 || TDIM2 || ANAM2 || MSM2 || \
  181.                 FTLM2)
  182.  
  183. #if Seimet
  184. #define crystal(a,b,c,d) SETREG(D1,F ## a); crystal
  185. #endif
  186.  
  187. /* a fill byte will be necessary if a type within a record occupies        */
  188. /* 8 bits (e.g. an enumeration type) instead of 16 bits                    */
  189.  
  190. #define fill_byte (LPRM2  || SPCM2  || HM2   || ANAM2 || FSTM2 || SDSM2 || \
  191.                    TSM2_1 || TSM2_2 || LM2   || FTLM2 || TDIM2 || GPM2)
  192.  
  193. /* if a compiler supports 'packed' records (two bytes are packed to one    */
  194. /* word)                                                                   */
  195.  
  196. #define packing (LPRM2 || SPCM2 || HM2   || ANAM2 || MM2    || MSM2   || \
  197.                  XAM2  || XHM2  || FSTM2 || SDSM2 || TSM2_1 || TSM2_2 || \
  198.                  LM2   || FTLM2 || TDIM2 || GPM2)
  199.  
  200. /* if a compiler has trouble with forward pointers                         */
  201.  
  202. #define no_forward_pointers FSTM2 || MSM2
  203.  
  204. /* if a export list is still necessary                                     */
  205.  
  206. #define export (ANAM2 || XAM2 || CBM2)
  207.  
  208. /* we do not use variant records with tag fields, so define for PIM2:      */
  209.  
  210. #if (defined ANAM2) || (defined XAM2)
  211. #define CASE: CASE
  212. #endif
  213.  
  214. /* if a compiler does not allow local modules within implementation modules*/
  215.  
  216. #define no_local_modules (LPRM2 || SPCM2 || SDSM2 || FTLM2 || TSM2_1)
  217.  
  218. /* NEW() and DISPOSE() for LPRM2 etc.                                      */
  219.  
  220. #if (defined LPRM2)
  221. #define NEW(P) ALLOCATE(P,SIZE(P^))
  222. #define DISPOSE(P) DEALLOCATE(P,SIZE(P^))
  223. #elif (defined SPCM2)
  224. #define NEW(P) ALLOCATE(P,SIZE(P^))
  225. #define DISPOSE(P) DEALLOCATE(P)
  226. #endif
  227.  
  228. /* there are compilers with a revers or swapped order of bits within sets  */
  229.  
  230. #define revers FTLM2
  231.  
  232. #define swapped /* NONE */
  233.  
  234. /* FTLM2 special                                                           */
  235.  
  236. #ifdef FTLM2
  237. #define HIGH(x) CARDINAL(HIGH(x))
  238. #endif
  239.  
  240. /* TSM2_1 special                                                          */
  241.  
  242. #ifdef TSM2_1
  243. #define EXPORT IMPORT
  244. #endif
  245.  
  246. /* FSTM2 3.1 special                                                       */
  247.  
  248. #define no_set_return FSTM2
  249.  
  250. /* language macros                                                         */
  251.  
  252. #define ENDIF END
  253. #define ENDFOR END
  254. #define ENDCASE END
  255. #define ENDWHILE END
  256. #define CONTINUE
  257. #define BREAK
  258.